#include <stdio.h>

// int main(){
//     printf("hello word\n");
//     return 0;
// }

// int main()
// {
//     register int num = 10; //register 寄存器    仅仅是建议的作用，建议放在寄存器中，但算不上真的放在寄存器中，取决于编译器


//     return 0;
// }

// #define M 100
// int main()
// {
//     int arr[M] = {0}; //100*4 = 400
//     int m = M;
//     printf("%d\n",sizeof(arr));
//     printf("%d\n",M);
//     printf("%d\n",m);

//     return 0;
// }


//定义宏
// #define ADD(x,y) ((x)+(y))
// int main()
// {
//     int a = 10;
//     int b = 20;
//     int c = ADD(a,b);
//     // int c = ((a)+(b))
//     printf("%d\n",c);

//     return 0;
// }



//结构体
//char short int long long long  float double

// char ch;
// int num;
//复杂对象    学生：名字+年龄+性别     书：书+作者+定价
//c语言中引入结构体来描述复杂对象
// struct Stu
// {
//     //学生的相关属性
//     char name[20];
//     int age;
//     char sex[5];

// };
// struct Book
// {
//     char name[20];
//     char author[10];
//     float price;
// };


// int main()
// {
//     struct Stu s = {"张三",20,"男"};
//     struct Book b = {"《小凡c语言》","小凡",66.6f};
//     printf("%s %s %f\n",b.name,b.author,b.price);

//     return 0;
// }

int main()
{
    int a = 15;   //虽然a占有4个字节，但是我们&a的时候，拿到的是4个字节中的第一个字节地址
     printf("%p\n",&a);
    //int* pa = &a; //pa是来存放地址的；  是一个变量：叫指针变量，意思是存放指针的变量   
    //在c语言中内存单元的编号    === 地址  ==== 指针
    //*pa = 30; //解引用操作符，*pa就是a
    //printf("%d\n",a);    
    return 0;
}


//指针 - 地址 -编号
//指针变量 -变量 -存放地址的变量

//口头语中说的指针，基本上都是指针比变量

// int main(){
//     double d = 3.14;

//     double* pd = &d;

//     return 0;


// }


//指针变量大小
//指针变量是用来存放地址的
//32位机器上：地址是32个二进制位，这个地址要存储的话要4个字节，所以在32位机器上，指针变量的大小是4个字节
//64位机器上：地址是64个二进制位，这个地址要存储的话要8个字节，所以在64位机器上，指针变量的大小是8个字节
// int main()
// {

//     int a = 10;
//     int* p = &a;
//     printf("%zd\n",sizeof(p));
//     printf("%zd\n",sizeof(int*));


//     return 0;
// }






// struct S
// {
//     char name[20];
//     int age;
//     float score;
// };

// void print1(struct S t)
// {
//     printf("%s %d %f\n",t.name,t.age,t.score);
// }

// void print2(struct S* ps)
// {
//     printf("%s %d %f\n",(*ps).name,(*ps).age,(*ps).score);
//     printf("%s %d %f\n",ps->name,ps->age,ps->score);    //(*ps).name 可以用 ps->name代替
// }
// //结构体变量.成员
// //结构指针->成员
// int main()
// {
//     struct S s = 
//     {
//         "zhangsan",20,85.5f
//     };

//     print1(s);
//     print2(&s);
    
//     return 0;
// }